import { getPage, post, get } from '../../request'

const ns = '/sys/dept'

export interface Dept {
  deptId: string // 部门ID
  deptName: string // 部门名称
  deptCode: string // 部门编码
  telephone: string //电话
  seq: number // 顺序
  parentId: string // 上级部门ID
  status: number // 状态（1正常 0暂停）
  children: Dept[]
  userCount: number
}
export interface DeptUser {
  deptId: string // 部门ID
  userIds: string[]
}

export const deptApi = {
  /**
   * 查询分页部门列表
   * @param page
   * @param params
   * @returns
   */
  findListPage: (page: AxiosType.Pagination, params?: { [key: string]: any }) => {
    return getPage({ url: ns, params }, page)
  },

  /**
   * 查询单个部门
   */
  findById: (id: string) => {
    return get({ url: `${ns}/${id}` })
  },

  /**
   * 保存部门
   *
   * @param {*} data 部门对象
   * @returns
   */
  save(data: Dept) {
    return post({
      url: ns,
      data
    })
  },

  /**
   * 删除部门
   *
   * @param {*} data 部门id数组
   * @returns
   */
  delete(data: string[]) {
    return post({
      url: `${ns}/delete`,
      data
    })
  },

  /**
   * 查询部门树
   */
  findTree() {
    return get({ url: `${ns}/tree` })
  },

  /**
   * 给部门授权菜单及权限
   *
   * @param {*} deptId
   * @param {*} data //包括4个节点trueNodeIds, trueFuncKeys, falseNodeIds, falseFuncKeys
   * @returns
   */
  authMenus: (
    deptId: string,
    addMenuIds: string[],
    addMenuIdFuncKeys: string[],
    deleteMenuIds: string[],
    deleteMenuIdFuncKeys: string[]
  ) => {
    return post({
      url: `${ns}/menu/auth`,
      data: {
        deptId,
        addMenuIds,
        addMenuIdFuncKeys,
        deleteMenuIds,
        deleteMenuIdFuncKeys
      }
    })
  },

  /**
   * 获取部门的授权菜单ID及功能ID
   * @param deptId
   * @returns
   */
  findMenus: (deptId: string) => {
    return get({ url: `${ns}/menu`, params: { deptId } })
  },

  /**
   * 查询分页部门用户列表
   * @param page
   * @param params
   * @returns
   */
  findUserListPage: (page: AxiosType.Pagination, params?: { [key: string]: any }) => {
    return getPage({ url: `${ns}/user`, params }, page)
  },

  /**
   * 添加部门用户
   * @param deptUser
   * @returns
   */
  addDeptUser: (deptUser: DeptUser) => {
    return post({ url: `${ns}/user/add`, data: { ...deptUser } })
  },

  /**
   * 移除部门用户
   * @param deptUser
   * @returns
   */
  removeDeptUser: (deptUser: DeptUser) => {
    return post({ url: `${ns}/user/remove`, data: { ...deptUser } })
  },

  /**
   * 更新部门用户序号
   * @param deptUser
   * @returns
   */
  updateUserSeq: (deptUser: any) => {
    return post({ url: `${ns}/user/seq/update`, data: { ...deptUser } })
  },

  /**
   * 刷新部门用户序号
   * @param deptId
   * @returns
   */
  refreshUserSeq: (deptId: string) => {
    return post({ url: `${ns}/user/seq/refresh`, data: { deptId } })
  }
}
